package com.cn.xiaonuo.slbfinances.slborders.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cn.xiaonuo.common.constant.Status;
import com.cn.xiaonuo.common.constant.SystemConstant;
import com.cn.xiaonuo.common.entity.BusinessMessage;
import com.cn.xiaonuo.common.utils.ExportExcelUtils;
import com.cn.xiaonuo.common.utils.StringUtils;
import com.cn.xiaonuo.common.vo.ExcelData;
import com.cn.xiaonuo.dbs.core.annotation.DataSource;
import com.cn.xiaonuo.slbfinances.slborders.entity.CommonOrder;
import com.cn.xiaonuo.slbfinances.slborders.entity.InOutOrder;
import com.cn.xiaonuo.slbfinances.slborders.mapper.CmRoyaltyMapper;
import com.cn.xiaonuo.slbfinances.slborders.param.CommonOrderParam;
import com.cn.xiaonuo.slbfinances.slborders.param.PaymentOrderParam;
import com.cn.xiaonuo.slbfinances.slborders.service.ICoverageRoyaltyService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Service
public class CoverageRoyaltyServiceImpl extends ServiceImpl<CmRoyaltyMapper,String> implements ICoverageRoyaltyService {
    @Resource
    private CmRoyaltyMapper cmRoyaltyMapper;

    @Override
    //02.卖家结款表
    @DataSource(name = "jyb_soole_data_hn")
    public BusinessMessage shopPaymentList(CommonOrderParam slbOrderReqParam){
        BusinessMessage message = new BusinessMessage();
        try {

            Integer pageSize = slbOrderReqParam.getPageSize();
            Integer pageNo = slbOrderReqParam.getPageNo();
            if (null == pageNo || Integer.valueOf(pageNo) <= 1) {
                pageNo = 1;
            }
            if (null == pageSize || Integer.valueOf(pageSize) <= 1) {
                pageSize = 10;
            }
            CommonOrder commonOrder=new CommonOrder();
            BeanUtil.copyProperties(slbOrderReqParam,commonOrder);
            PageHelper.startPage(pageNo,pageSize);
            //2.查询数据，卖家结款列表
            List<Map<String, Object>> royaltyList = cmRoyaltyMapper.shopPaymentList( commonOrder);
            PageInfo<Map<String, Object>> data = new PageInfo<>(royaltyList);

            //3.返回数据
            message.setData(data);
            message.setSuccess(true);
            message.setMessage("操作成功");
            return message;
        } catch (Exception e) {
            e.printStackTrace();
            message.setSuccess(false);
            message.setMessage("操作失败");
            return message;
        }
    }


    //04.卖家批量结款
    @Override
    @DataSource(name = "jyb_soole_data_hn")
    public BusinessMessage shopPayment(String paymentIdList,Integer userId){
        BusinessMessage message = new BusinessMessage();
        try {
            if(null==userId){
                message.setSuccess(false);
                message.setCode("-1");
                message.setMessage("登录用户不能为空");
                return message;
            }
            //3.去掉前端参数中的中括号，转为数组
            paymentIdList = paymentIdList.replace("[","");
            paymentIdList = paymentIdList.replace("]","");
            String[] idList = paymentIdList.split(",");//截取为数组
            //4.遍历数据进行修改
            int i = cmRoyaltyMapper.shopPayment(userId,idList);
            //5.返回数据
            message.setSuccess(true);
            message.setMessage("成功操作"+i+"条数据");
            return message;
        } catch (Exception e) {
            e.printStackTrace();
            message.setSuccess(false);
            message.setMessage("操作失败");
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚事务
            return message;
        }
    }

    /**
     * 服务中心商户结算
     * @param slbOrderReqParam
     * @return
     */
    @Override
    @DataSource(name = "jyb_soole_data_hn")
    public BusinessMessage shopPaymentPage(PaymentOrderParam slbOrderReqParam){
        BusinessMessage message = new BusinessMessage();
        CommonOrder commonOrder=new CommonOrder();
        try {
            Integer pageSize = slbOrderReqParam.getPageSize();
            Integer pageNo = slbOrderReqParam.getPageNo();
            BeanUtil.copyProperties(slbOrderReqParam,commonOrder);
            if (null == pageNo || pageNo < 1) {
                commonOrder.setPageNo(1);
            }
            if (null == pageSize || pageSize < 1) {
                commonOrder.setPageSize(10);
            }
            PageHelper.startPage(commonOrder.getPageNo(),commonOrder.getPageSize());
            //2.查询数据，卖家结款列表
            List<CommonOrder> royaltyList = cmRoyaltyMapper.newShopPaymentList(commonOrder);
            PageInfo<CommonOrder> data = new PageInfo<>(royaltyList);

            //3.返回数据
            message.setData(data);
            message.setSuccess(true);
            message.setCode(Status.successCode);
            message.setMessage("操作成功");
            return message;
        } catch (Exception e) {
            e.printStackTrace();
            message.setSuccess(false);
            message.setCode(Status.failCode);
            message.setMessage("操作失败");
            return message;
        }
    }
    /**
     * 服务中心商户结算
     * @param slbOrderReqParam
     * @return
     */
    @Override
    @DataSource(name = "jyb_soole_data_hn")
    public void shopPaymentExcel(HttpServletResponse response, PaymentOrderParam slbOrderReqParam){
        CommonOrder commonOrder=new CommonOrder();
        BeanUtil.copyProperties(slbOrderReqParam,commonOrder);
        List<CommonOrder> royaltyList = cmRoyaltyMapper.newShopPaymentList(commonOrder);
        try {
            List<List<Object>> rows = new ArrayList();
            ExcelData data = new ExcelData();
            data.setName("商户结算导出");//sheet表名称
            //表头
            List<String> titles = new ArrayList();
            titles.add("收货时间");
            titles.add("商家名称");
            titles.add("商家类型");
            titles.add("商家ID");
            titles.add("商家用户ID");
            titles.add("联系方式");
            titles.add("银行卡账号");
            titles.add("所属银行");
            titles.add("开户支行");
            titles.add("服务中心（上级）");
            titles.add("服务中心ID");
            titles.add("订单ID");
            titles.add("订单编号");
            titles.add("订单类型");
            titles.add("商品名称");
            titles.add("订单总金额");
            titles.add("进价总金额");
            titles.add("现金实付款");
            titles.add("购物券（县）");
            titles.add("购物券（乡");
            titles.add("支付方式");
            titles.add("现金分账金额");
            titles.add("购物券分账金额");
            titles.add("平台服务费");
            titles.add("应付金额");
            titles.add("结款金额");
            titles.add("结款时间");
            titles.add("结款状态");
            titles.add("冻结状态");
            titles.add("解冻时间");
            data.setTitles(titles);
            for (CommonOrder commonOrderE : royaltyList) {
                List<Object> row1 = new ArrayList();
                row1.add(commonOrderE.getCreateTime());
                row1.add(commonOrderE.getShopName());
                if(commonOrderE.getShopType()!=null){
                    if (commonOrderE.getShopType()==1) {
                        row1.add("加盟店");
                    } else {
                        row1.add("普通店铺");
                    }
                }
                row1.add(commonOrderE.getShopId());
                row1.add(commonOrderE.getUserId());
                row1.add(commonOrderE.getShopPhone());
                row1.add(commonOrderE.getShopBankNumber());
                row1.add(commonOrderE.getShopBankName());
                row1.add(commonOrderE.getShopOpenBank());
                row1.add(commonOrderE.getServiceName());
                row1.add(commonOrderE.getServiceId());
                row1.add(commonOrderE.getOrderId());
                row1.add(commonOrderE.getSerialNumber());
                if(commonOrderE.getOrderType()!=null){
                    if (commonOrderE.getOrderType()==1) {
                        row1.add("一县一品订单");
                    } else  if (commonOrderE.getOrderType()==2){
                        row1.add("普通订单");
                    }
                }else{
                    row1.add("");
                }
                row1.add(commonOrderE.getProductName());
                row1.add(commonOrderE.getOrderPrice());
                row1.add(commonOrderE.getCostTotalAmount());
                row1.add(commonOrderE.getTotalAmount());
                row1.add(commonOrderE.getTotalGzGwj());
                row1.add(commonOrderE.getTotalHpcGwj());
                if(commonOrderE.getPayType()!=null){
                    if (commonOrderE.getPayType()==0) {
                        row1.add("待支付");
                    } else  if (commonOrderE.getPayType()==1){
                        row1.add("微信");
                    }else  if (commonOrderE.getPayType()==2){
                        row1.add("支付宝");
                    }else  if (commonOrderE.getPayType()==3){
                        row1.add("银行卡");
                    }else  if (commonOrderE.getPayType()==4){
                        row1.add("其他");
                    }else  if (commonOrderE.getPayType()==5){
                        row1.add("搜了付");
                    }else if (commonOrderE.getPayType()==6){
                        row1.add("支付宝购物卷");
                    }else  if (commonOrderE.getPayType()==7){
                        row1.add("微信购物卷");
                    }else  if (commonOrderE.getPayType()==19){
                        row1.add("杉德支付");
                    }
                    /*else  if (commonOrderE.getPayType()==6){
                        row1.add("乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==7){
                        row1.add("一县一品购物劵");
                    }else  if (commonOrderE.getPayType()==8){
                        row1.add("微信和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==9){
                        row1.add("微信和一县一品购物劵");
                    }else  if (commonOrderE.getPayType()==10){
                        row1.add("支付宝和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==11){
                        row1.add("支付宝和一县一品");
                    }else  if (commonOrderE.getPayType()==12){
                        row1.add("银行卡和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==13){
                        row1.add("银行卡和一县一品购物劵");
                    }*/else{
                        row1.add("其他");
                    }
                }else{
                        row1.add("");
                }
                row1.add(commonOrderE.getPaFzMoney());
                row1.add(commonOrderE.getGwjFzMoney());
                row1.add(commonOrderE.getCommission());
                row1.add(commonOrderE.getShouldPrice());
                row1.add(commonOrderE.getActualPrice());
                row1.add(commonOrderE.getPayTime());
                if(commonOrderE.getPayStatus()!=null){
                    if ("0".equals(commonOrderE.getPayStatus())) {
                        row1.add("未结款");
                    } else  if ("1".equals(commonOrderE.getPayStatus())){
                        row1.add("已结款");
                    }
                }else{
                    row1.add("");
                }
                if(commonOrderE.getFrozenStatus()!=null){
                    if(commonOrderE.getFrozenStatus()==null){
                        row1.add("正常");
                    }else{
                        if (commonOrderE.getFrozenStatus()==1) {
                            row1.add("正常");
                        } else  if (commonOrderE.getFrozenStatus()==2){
                            row1.add("冻结");
                        }
                    }
                }else{
                    row1.add("");
                }
                row1.add(commonOrderE.getFrozenTime());
                rows.add(row1);
            }

            data.setRows(rows);
            ExportExcelUtils.exportExcel(response, "商户结算新版.xlsx", data);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 服务中心商户结算
     * @param slbOrderReqParam
     * @return
     */
    @Override
    @DataSource(name = "jyb_soole_data_hn")
    public BusinessMessage fwzxShopPaymentPage(PaymentOrderParam slbOrderReqParam){
        BusinessMessage message = new BusinessMessage();
        CommonOrder commonOrder=new CommonOrder();
        try {
            Integer pageSize = slbOrderReqParam.getPageSize();
            Integer pageNo = slbOrderReqParam.getPageNo();
            BeanUtil.copyProperties(slbOrderReqParam,commonOrder);
            if (null == pageNo || pageNo < 1) {
                commonOrder.setPageNo(1);
            }
            if (null == pageSize || pageSize < 1) {
                commonOrder.setPageSize(10);
            }
            PageHelper.startPage(commonOrder.getPageNo(),commonOrder.getPageSize());
            //2.查询数据，卖家结款列表
            List<CommonOrder> royaltyList = cmRoyaltyMapper.fwzxShopPaymentList(commonOrder);
            PageInfo<CommonOrder> data = new PageInfo<>(royaltyList);

            //3.返回数据
            message.setData(data);
            message.setSuccess(true);
            message.setMessage("操作成功");
            return message;
        } catch (Exception e) {
            e.printStackTrace();
            message.setSuccess(false);
            message.setMessage("操作失败");
            return message;
        }
    }
    /**
     * 服务中心商户结算
     * @param slbOrderReqParam
     * @return
     */
    @Override
    @DataSource(name = "jyb_soole_data_hn")
    public void fwzxShopPaymentExcel(HttpServletResponse response, PaymentOrderParam slbOrderReqParam){
        CommonOrder commonOrder=new CommonOrder();
        BeanUtil.copyProperties(slbOrderReqParam,commonOrder);
        List<CommonOrder> royaltyList = cmRoyaltyMapper.fwzxShopPaymentList(commonOrder);
        try {
            List<List<Object>> rows = new ArrayList();
            ExcelData data = new ExcelData();
            data.setName("服务中心结算导出");//sheet表名称
            //表头
            List<String> titles = new ArrayList();
            titles.add("收货时间");
            titles.add("服务中心");
            titles.add("服务中心ID");
            titles.add("联系方式");
            titles.add("银行卡账号");
            titles.add("所属银行");
            titles.add("开户支行");
            titles.add("商家名称");
            titles.add("商家类型");
            titles.add("商家ID");
            titles.add("商家用户ID");
            titles.add("订单ID");
            titles.add("订单编号");
            titles.add("订单类型");
            titles.add("商品名称");
            titles.add("订单总金额");
            titles.add("进价总金额");
            titles.add("现金实付款");
            titles.add("购物券（县）");
            titles.add("购物券（乡");
            titles.add("支付方式");
            titles.add("现金分账金额");
            titles.add("购物券分账金额");
            titles.add("平台服务费");
            titles.add("应付金额");
            titles.add("结款金额");
            titles.add("结款时间");
            titles.add("结款状态");
            titles.add("备注");
            data.setTitles(titles);
            for (CommonOrder commonOrderE : royaltyList) {
                List<Object> row1 = new ArrayList();
                row1.add(commonOrderE.getCreateTime());
                row1.add(commonOrderE.getServiceName());
                row1.add(commonOrderE.getServiceId());
                row1.add(commonOrderE.getShopPhone());
                row1.add(commonOrderE.getShopBankNumber());
                row1.add(commonOrderE.getShopBankName());
                row1.add(commonOrderE.getShopOpenBank());
                row1.add(commonOrderE.getShopName());
                if(commonOrderE.getShopType()!=null){
                    if (commonOrderE.getShopType()==1) {
                        row1.add("普通");
                    } else  if (commonOrderE.getShopType()==2){
                        row1.add("服务中心");
                    }else  if (commonOrderE.getShopType()==3){
                        row1.add("加盟店");
                    }
                }else{
                    row1.add("");
                }
                row1.add(commonOrderE.getShopId());
                row1.add(commonOrderE.getUserId());
                row1.add(commonOrderE.getOrderId());
                row1.add(commonOrderE.getSerialNumber());
                if(commonOrderE.getOrderType()!=null){
                    if (commonOrderE.getOrderType()==1) {
                        row1.add("一县一品订单");
                    } else  if (commonOrderE.getOrderType()==2){
                        row1.add("普通订单");
                    }
                }else{
                    row1.add("");
                }
                row1.add(commonOrderE.getProductName());
                row1.add(commonOrderE.getOrderPrice());
                row1.add(commonOrderE.getCostTotalAmount());
                row1.add(commonOrderE.getTotalAmount());
                row1.add(commonOrderE.getTotalGzGwj());
                row1.add(commonOrderE.getTotalHpcGwj());
                if(commonOrderE.getPayType()!=null){
                    if (commonOrderE.getPayType()==0) {
                        row1.add("待支付");
                    } else  if (commonOrderE.getPayType()==1){
                        row1.add("微信");
                    }else  if (commonOrderE.getPayType()==2){
                        row1.add("支付宝");
                    }else  if (commonOrderE.getPayType()==3){
                        row1.add("银行卡");
                    }else  if (commonOrderE.getPayType()==4){
                        row1.add("其他");
                    }else  if (commonOrderE.getPayType()==5){
                        row1.add("搜了付");
                    }else  if (commonOrderE.getPayType()==6){
                        row1.add("乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==7){
                        row1.add("一县一品购物劵");
                    }else  if (commonOrderE.getPayType()==8){
                        row1.add("微信和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==9){
                        row1.add("微信和一县一品购物劵");
                    }else  if (commonOrderE.getPayType()==10){
                        row1.add("支付宝和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==11){
                        row1.add("支付宝和一县一品");
                    }else  if (commonOrderE.getPayType()==12){
                        row1.add("银行卡和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==13){
                        row1.add("银行卡和一县一品购物劵");
                    }else{
                        row1.add("其他");
                    }
                }else{
                    row1.add("");
                }
                row1.add(commonOrderE.getPaFzMoney());
                row1.add(commonOrderE.getGwjFzMoney());
                row1.add(commonOrderE.getCommission());
                row1.add(commonOrderE.getShouldPrice());
                row1.add(commonOrderE.getActualPrice());
                row1.add(commonOrderE.getPayTime());
                if(commonOrderE.getPayStatus()!=null){
                    if ("0".equals(commonOrderE.getPayStatus())) {
                        row1.add("未结款");
                    } else  if ("1".equals(commonOrderE.getPayStatus())){
                        row1.add("已结款");
                    }
                }else{
                    row1.add("");
                }

                rows.add(row1);
            }
            data.setRows(rows);
            ExportExcelUtils.exportExcel(response, "服务中心结算导出.xlsx", data);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 服务中心商户结算
     * @param slbOrderReqParam
     * @return
     */
    @Override
    @DataSource(name = "jyb_soole_data_hn")
    public BusinessMessage inOutShopPaymentPage(PaymentOrderParam slbOrderReqParam){
        BusinessMessage message = new BusinessMessage();
        CommonOrder commonOrder=new CommonOrder();
        try {
            Integer pageSize = slbOrderReqParam.getPageSize();
            Integer pageNo = slbOrderReqParam.getPageNo();
            BeanUtil.copyProperties(slbOrderReqParam,commonOrder);
            if (null == pageNo || pageNo < 1) {
                commonOrder.setPageNo(1);
            }
            if (null == pageSize || pageSize < 1) {
                commonOrder.setPageSize(10);
            }
            PageHelper.startPage(commonOrder.getPageNo(),commonOrder.getPageSize());
            //2.查询数据，卖家结款列表
            List<CommonOrder> royaltyList = cmRoyaltyMapper.inOutShopPaymentList(commonOrder);
            PageInfo<CommonOrder> data = new PageInfo<>(royaltyList);

            //3.返回数据
            message.setData(data);
            message.setSuccess(true);
            message.setMessage("操作成功");
            return message;
        } catch (Exception e) {
            e.printStackTrace();
            message.setSuccess(false);
            message.setMessage("操作失败");
            return message;
        }
    }
    /**
     * 服务中心商户结算
     * @param slbOrderReqParam
     * @return
     */
    @Override
    @DataSource(name = "jyb_soole_data_hn")
    public void inOutShopPaymentExcel(HttpServletResponse response, PaymentOrderParam slbOrderReqParam){
        CommonOrder commonOrder=new CommonOrder();
        BeanUtil.copyProperties(slbOrderReqParam,commonOrder);
        List<CommonOrder> royaltyList = cmRoyaltyMapper.inOutShopPaymentList(commonOrder);
        try {
            List<List<Object>> rows = new ArrayList();
            ExcelData data = new ExcelData();
            data.setName("商户结算导出");//sheet表名称
            //表头
            List<String> titles = new ArrayList();
            titles.add("收货时间");
            titles.add("产业公司(出货方)");
            titles.add("产业公司ID(出货方)");
            titles.add("联系方式");
            titles.add("银行卡账号");
            titles.add("所属银行");
            titles.add("开户支行");
            titles.add("订单ID");
            titles.add("进货单号");
            titles.add("商品名称");
            titles.add("进价总金额");
            titles.add("现金实付款");
            titles.add("支付方式");
            titles.add("现金分账金额");
            titles.add("应付金额");
            titles.add("结款金额");
            titles.add("结款时间");
            titles.add("结款状态");
            titles.add("冻结状态");
            data.setTitles(titles);
            for (CommonOrder commonOrderE : royaltyList) {
                List<Object> row1 = new ArrayList();
                row1.add(commonOrderE.getCreateTime());
                row1.add(commonOrderE.getShopName());
                row1.add(commonOrderE.getShopId());
                row1.add(commonOrderE.getShopPhone());
                row1.add(commonOrderE.getShopBankNumber());
                row1.add(commonOrderE.getShopBankName());
                row1.add(commonOrderE.getShopOpenBank());
                row1.add(commonOrderE.getOrderId());
                row1.add(commonOrderE.getSerialNumber());
                row1.add(commonOrderE.getProductName());
                row1.add(commonOrderE.getCostTotalAmount());
                row1.add(commonOrderE.getTotalAmount());
                if(commonOrderE.getPayType()!=null){
                    if (commonOrderE.getPayType()==0) {
                        row1.add("待支付");
                    } else  if (commonOrderE.getPayType()==1){
                        row1.add("微信");
                    }else  if (commonOrderE.getPayType()==2){
                        row1.add("支付宝");
                    }else  if (commonOrderE.getPayType()==3){
                        row1.add("银行卡");
                    }else  if (commonOrderE.getPayType()==4){
                        row1.add("其他");
                    }else  if (commonOrderE.getPayType()==5){
                        row1.add("搜了付");
                    }else  if (commonOrderE.getPayType()==6){
                        row1.add("乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==7){
                        row1.add("一县一品购物劵");
                    }else  if (commonOrderE.getPayType()==8){
                        row1.add("微信和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==9){
                        row1.add("微信和一县一品购物劵");
                    }else  if (commonOrderE.getPayType()==10){
                        row1.add("支付宝和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==11){
                        row1.add("支付宝和一县一品");
                    }else  if (commonOrderE.getPayType()==12){
                        row1.add("银行卡和乡村振兴购物劵");
                    }else  if (commonOrderE.getPayType()==13){
                        row1.add("银行卡和一县一品购物劵");
                    }else  if (commonOrderE.getPayType()==19){
                        row1.add("杉德支付");
                    }else{
                        row1.add("其他");
                    }
                }else{
                    row1.add("");
                }
                row1.add(commonOrderE.getPaFzMoney());
                row1.add(commonOrderE.getShouldPrice());
                row1.add(commonOrderE.getActualPrice());
                row1.add(commonOrderE.getPayTime());
                if(commonOrderE.getPayStatus()!=null){
                    if ("0".equals(commonOrderE.getPayStatus())) {
                        row1.add("未结款");
                    } else  if ("1".equals(commonOrderE.getPayStatus())){
                        row1.add("已结款");
                    }
                }else{
                    row1.add("");
                }
                if(commonOrderE.getFrozenStatus()!=null){
                    if (commonOrderE.getFrozenStatus()==1) {
                        row1.add("正常");
                    } else  if (commonOrderE.getFrozenStatus()==2){
                        row1.add("冻结");
                    }
                }else{
                    row1.add("");
                }
                rows.add(row1);
            }

            data.setRows(rows);
            ExportExcelUtils.exportExcel(response, "进出货结算导出.xlsx", data);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
